import axios from "axios";


axios.defaults.withCredentials = true;
const service = axios.create({
  // baseURL: 'http://localhost:9999/api',
  baseURL: process.env.USE_MOCK ? '/mock' : process.env.BASE_API,
  timeout: 50000,
})

service.interceptors.request.use(req => {
  return req
}, err => {
  console.log(err)
  return Promise.reject(err);
})

service.interceptors.response.use( res => {
  return res
}, err => {
  console.log(err)
  return Promise.reject(err);
})

// 用一个新的promise再包一层处理抛出的错误
const fetch = function (config) {
  return new Promise(function (resolve, reject) {
    service(config)
      .then(res => {
        return checkStatus(res)
      })
      .then(res => {
        return checkCode(res)
      })
      .then(res => {
        let contentType = 'application/json'; // 默认值
        if (res.headers) {
          contentType = res.headers['content-type'];
        }
        if (!contentType.includes('application/json')) {
          // content-type 不为 application/json 时，属于下载文件
          if (res.data instanceof Blob) {
            resolve(res);
          } else if (typeof res.data == 'string') {
            resolve(res);
          } else {
            reject(res.data);
          }
        } else {
          // content-type：application/json
          if (res.data instanceof Blob) {
            //将Blob对象转换成字符串
            let blob = res.data;
            var reader = new FileReader();
            reader.readAsText(blob, 'utf-8');
            reader.onload = function (e) {
              res.data = JSON.parse(reader.result);
            };
          } else {
            resolve(res)
          }
        }
      })
      .catch(res => {
        // 返回错误信息
        reject(res)
      });
  });
};


// 检查请求状态
function checkStatus(res) {
  // 如果http状态码正常，则直接返回数据
  if (res && (res.status === 200 || res.status === 304)) {
    return res
  }
  // 异常状态下，把错误信息返回去
  if (!res) {
    return {
      status: -1,
      message: '无法连接服务器，请稍后再试'
    }
  } else {
    return {
      status: res.status,
      message: '服务器返回出错'
    }
  }
}
function checkCode(res) {
  switch(res.data.code){
    case 1:
     window.location='/login'
     break
    default:
  }
  return res
}


/*
function logout() {
  Modal.confirm({
    content: '你已被登出，可以取消继续留在该页面，或者重新登录',
    type: 'warning',
    onOk: () => {
      // 移除用户名和密码
      Cookies.remove('userName');
      Cookies.remove('password');
      //  跳转到登录页面
      router.push('/login');
    }
  });
}
*/

export default {
  get(url,param){
    return fetch({
      method:'get',
      url,
      param,
    })
  },
  post(url,data){
    return fetch({
      method: 'post',
      url,
      data,
    })
  },
  request(config) {
    return fetch(config)
  }
}
